home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / wormhole / wormhol6.c < prev    next >
C/C++ Source or Header  |  1993-04-13  |  2KB  |  115 lines

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<dos.h>
  4. #include<conio.h>
  5. #include<math.h>
  6.  
  7. #define STRETCH 25
  8. #define SIZE    40
  9. #define FAC             1
  10. #define PI              3.14159265358979323846
  11. #define XCENTER 160
  12. #define YCENTER 50
  13. #define DIVS    1200
  14. #define SPOKES  2400
  15. #define NUMSQT  20
  16.  
  17. //grfx routines
  18.  
  19. char far *p;
  20.  
  21. void initgr256(void)     //Tested
  22. {
  23. asm{
  24.     mov ah,00h
  25.     mov al,13h
  26.     int 10h
  27.    }
  28.    p=(char *)MK_FP(0xa000,0);
  29. }
  30. void deinit(void)       //Tested
  31. {
  32. asm{
  33.     mov ah,00h
  34.     mov al,03h
  35.     int 10h
  36.    }
  37. }
  38.  
  39. void setpalcol(short int color, short int red, short int green, short int blue)
  40. {
  41. asm {
  42.     mov dx,03c8h
  43.     mov ax,color
  44.     out dx,al
  45.     inc dx
  46.     mov ax,red
  47.     out dx,al
  48.     mov ax,green
  49.     out dx,al
  50.     mov ax,blue
  51.     out dx,al
  52.     };
  53. }
  54. void plot(int x,int y,int color)
  55. {
  56. p[x+320*y]=color;
  57. }
  58.  
  59. void waitfor(void)
  60. {
  61. asm MOV     DX,3DAh;
  62. Wait: asm   IN      AL,DX
  63. asm TEST    AL,08h
  64. asm JZ      Wait
  65. Retr: asm   IN      AL,DX
  66. asm         TEST    AL,08h
  67. asm         JNZ     Retr
  68. }
  69.  
  70. void setpal(void)
  71.     {
  72.     int k,l;
  73.     for (k=0;k<15;k++)
  74.         for(l=0;l<15;l++)
  75.             {
  76.             setpalcol(k+15*l+1,4*(k%15),4*(l%15),63);
  77.             setpalcol(0,0,0,0);
  78.             }
  79.     }
  80.  
  81. //Do all the work!
  82. //convert r,theta,z to x,y,x to screen x,y
  83. //plot the point
  84. //z=-1.0+(log(2.0*j/DIVS) is the line that sets the math eqn for plot
  85. //Feel free to try other functions!
  86. //Cylindrical coordinates, i.e. z=f(r,theta)
  87.  
  88. void transarray(void)
  89.     {
  90.     float x,y,z;
  91.     int i,j,color;
  92.     for(j=1;j<DIVS+1;j++)
  93.         for(i=0;i<SPOKES;i++)
  94.             {
  95.             z=-1.0+(log(2.0*j/DIVS));
  96.             x=(320.0*j/DIVS*cos(2*PI*i/SPOKES));
  97.             y=(240.0*j/DIVS*sin(2*PI*i/SPOKES));
  98.             y=y-STRETCH*z;
  99.             x+=XCENTER;
  100.             y+=YCENTER;
  101.             color=((i/8)%15)+15*((j/6)%15)+1;
  102.             if ((x>=0)&&(x<=320)&&(y>=0)&&(y<=200))
  103.                 plot((int) x,(int) y,color);
  104.             }
  105.     }
  106.  
  107. void main(void)
  108.     {
  109.     initgr256();
  110.     setpal();
  111.     transarray();
  112.     getch();
  113.     deinit();
  114.     }
  115.